Transformações Geométricas
Uma introduçaõ as transformações aplicadas a figuras geométricas- incluindo translação, reflexão, rotação, estiramento e recolhimento.
[Direções : Execute primeiramente a seção Code Resource. Embora não haja output imediato, essas definições serão usadas posteriormente nessa worksheet.]
0. Código
| > | restart; with(geometry): |
| > | #-------COLORS ------------------------ co := 'color = COLOR(RGB, .9, .5, .1), filled = true': co2 := 'color = COLOR(RGB, .8, .6, .1), filled = true': cr := 'color = COLOR(RGB, .9, .2, .1), filled = true': cr2 := 'color = COLOR(RGB, .9, .4, .2), filled = true': cy := 'color = COLOR(RGB, .8, .8, .1), filled = true': cg := 'color = COLOR(RGB, .35, .6, .35), filled = true': cg2 := 'color = COLOR(RGB, .5, .75, .5), filled = true': cb := 'color = COLOR(RGB, .5, .4, .8), filled = true': cb2 := 'color = COLOR(RGB, .3, .2, .8), filled = true': cgr := 'color = COLOR(RGB, .6, .65, .6), filled = true': cgr2 := 'color = COLOR(RGB, .35, .38, .35), filled = true': cw := 'clockwise': ccw := 'counterclockwise': |
| > | #-------POINTS ------------------------ point( Orig, 0,0 ): point( A, 1,3): point( B, 8, 3 ): point( C, 5,9): point( E, -3, 8): |
| > | #-------SEGMENTS ------------------------ dsegment( seg1 , Orig, C): dsegment( seg2 , B,E): |
| > |
| > |
| > | #-------TRIANGLES ------------------------ triangle( t0, [Orig, A,B] ): triangle( t1, [A,B,C] ): triangle( t2, [A,B,E] ): |
| > | #-------OTHER FIGURES ------------------------ square(s1,[ point(v1,3,1), point(v2,7,1), point(v3,7,5), point(v4,3,5)]): circle(c1, [B, 2]): RegularPolygon(poly5,5, point(v5,-3,3),2): RegularStarPolygon(star,5/2, point(v6, 2,-2),1): |
| > |
| > |
| > | #-------Functions ------------------------ Trans3 := proc( obj ) translation( Ta, obj, seg1 ); translation( Tb, Ta, seg1); draw( [obj(cr), Ta(co), Tb(cy)] ); end proc: |
| > | TransN := proc(obj, n) local j,P,GG; global Orig, seg; for j from 1 to n do dsegment( seg, Orig, point( GG, j, j) ): translation( P||j, obj, seg ): od: draw( [obj(cb), P||n(cg), seq(op([P||i(color=black)]),i=1..n-1) ] ); end proc: |
| > | RotN := proc(obj, n) local i,P,GG; global Orig, seg; for i from 1 to n do rotation( P||i, obj, i*Pi/6, ccw); od: draw( [obj(cb2), seq(op([P||i(color=black)]),i=1..n-1), P||n(cb)], axes = normal); end proc: |
| > | Refl2 := proc(obj) local rx, ry, rxy, p_diag,n_diag, x1, x2, y1, y2; line( p_diag, [point(x1, -10,-10), point( x2, 10, 10)]): line( n_diag, [point(y1, 10,-10), point( y2, -10, 10)]): reflection( rx, obj, p_diag); reflection( ry, obj, n_diag); reflection( rxy, rx, n_diag); draw( [obj(cg), rx(cg2), ry(cgr), rxy(cb), p_diag(cgr), n_diag(cgr2)], axes = none); end proc: |
| > | ReflPt := proc( obj ) local Q1,Q2,Q3,R1,R2,R3; point( Q1, 5, 0); reflection( R1, obj, Q1); point( Q2, 15, 10); reflection( R2, obj, Q2); point( Q3, -1, 6); reflection( R3, obj, Q3); draw( { obj(cr), R1(cy), R2(cb), R3(cg), Q1, Q2, Q3 }); end proc: |
| > |
1. Translação
Umas das transformações simples é a translação. Uma translação significa mover o objeto para uma nova posição, movendo horizontalmente (esquerda ou direita) alguma distância, e verticalmente (acima ou abaixo) alguma distância. Esse é um exemplo de uma transformação rígida que preserva o tamanho do objeto.
Aqui está um triângulo laranja avermelado com um vértice na origem. Se nós o mudássemos de posiçaõ uma vez, nós obteríamos um triângulo laranja claro, e novamente um triângulo amarelo.
| > | Trans3(t1); |
Isso mostra alguns passos intermediários em uma translação, como o triângulo azul se move e se torna um triângulo verde.
| > | TransN(t1,4); |
Nós podemos ver o que acontece quando nós aplicamos a mesma translação para diferentes formas geométricas.
| > | Trans3(t2); TransN(t2,4); |
| > | Trans3(s1); TransN(s1,4); |
| > | Trans3(c1); TransN(c1,4); |
| > | Trans3(poly5); TransN(poly5,4); |
| > | Trans3(star); TransN(star,4); |
2. Rotação
Outra transformação rígida é uma rotação. Aqui está um exemplo de um quadrado girado no sentido anti-horário. Observe como a orientação do quadrado muda durante a rotação. No final, esta quase de cabeça para baixo.
| > | RotN( s1,8) ; |
Aqui estão diferentes formas com rotações aplicadas.
| > | RotN( t1,8) ; |
| > | RotN( c1,8) ; |
| > | RotN( t2,8) ; |
| > | RotN( poly5,7) ; |
| > | RotN( star,9) ; |
3. Reflexão Através de uma Linha
Nós olharemos agora reflexões através de uma linha.
Reflection Através dos Eixos X & Y
Primeiro nós definimos duas linhas que representamos eixos x e y.
| > | line( x_axis, [point(x1, -10,0), point( x2, 10, 0)]): line( y_axis, [point(y1, 0,-10), point( y2, 0, 10)]): |
Depois, nós refletimos um objeto, nesse caso um triângulo, através do eixo x, do eixo y, e ambos, então nós desenhamos o triângulo e três reflexões.
| > | obj := t2: reflection( rx, obj ,x_axis): reflection( ry, obj, y_axis): reflection( rxy, rx, y_axis): draw( { obj(cg), rx(cg2), ry(cy), rxy(cb) , x_axis(cgr), y_axis(cgr)}, axes = none); |
| > | obj := poly5: reflection( rx, obj ,x_axis): reflection( ry, obj, y_axis): reflection( rxy, rx, y_axis): draw( { obj(cg), rx(cg2), ry(cy), rxy(cb) , x_axis(cgr), y_axis(cgr)}, axes = none); |
Reflexão Através de Linhas Diagonais
Nós podemos fazer refletir um objeto através de qualquer linha. Aqui estão quatro reflexões. Uma através de cada linha, e depois um reflexão dupla sobre uma linha depois a outra.
| > | Refl2(t2); |
Observe que a reflexão depende da distância do obejto em relação aos eixos de rotação. Se está em um eixo, a reflexão não será tão dramática.
| > | Refl2(star); |
| > | Refl2(s1); |
| > | Refl2(c1); |
| > | Refl2(t1); |
4. Reflexão Através de um Ponto
É também possível refletir um objeto através de um ponto. A maneira pela qual isto é feito é desenhar uma linha de cada vértice da forma, digamos um triângulo, através do ponto de reflexão. Depois se você medir a mesma distância no lado oposto da linha para cada uma das três linhas, irá definir os três novos pontos. Esses pontos definem um triângulo onde a reflexão acontece através do ponto.
Aqui está um triângulo refletido através de três pontos diferentes. O triângulo vermelho é o original. Você pode ver os pontos e as reflexões do triângulo.
| > | ReflPt(t1); |
| > | ReflPt( s1); |
| > | ReflPt( poly5); |
| > | ReflPt( star); |
| > |
5. Estiramento e Contração
Outra transformação é reduzir ou ampliar um objeto. Nós o tornamos maior ou menor -mantendo a mesma forma mas modificando todas as dimensões juntamente com o perímetro e área. Esse tipo de transformação não é uma transformação rígida, mas ela preserva ângulo e forma. A original é em cinza, a verde escura é a versão diminuída, e a verde clara é a versão expandida do objeto.
| > | obj := t2: stretch( T6, obj, .4, Orig): stretch( T7, obj, 2, Orig): draw( [obj(cgr), T6(cg), T7(cg2) ] ); |
| > | obj := s1: stretch( T6, obj, .4, Orig): stretch( T7, obj, 2, Orig): draw( [obj(cgr), T6(cg), T7(cg2) ] ); |
| > | obj := t1: stretch( T6, obj, .4, Orig): stretch( T7, obj, 2, Orig): draw( [obj(cgr), T6(cg), T7(cg2) ] ); |
Aqui está uma sequência de transformações que aumentam a forma em 5 vezes..
| > | obj := t2: n := 5: for j from 1 to n do stretch( P||j, obj, j, A): od: draw({obj(cr2), seq(op([P||j(color=black)]),j=1..n) }, axes = normal); |
| > | obj := star: n := 5: for j from 1 to n do stretch( P||j, obj, j, A): od: draw({obj(cr2), seq(op([P||j(color=black)]),j=1..n) }, axes = normal); |
Here is a sequence of transformations which shrink a shape.
| > | obj := c1: n := 6: point( G, 1, 7): for j from 1 to n do stretch( P||j, obj, 1/j, G): od: draw({P||n(cr), obj(co), seq(op([P||j(color=black)]),j=1..(n-1))}, axes = normal); |
| > | obj := poly5: n := 6: point( G, 1, 7): for j from 1 to n do stretch( P||j, obj, 1/j, G): od: draw({P||n(cr), obj(co), seq(op([P||j(color=black)]),j=1..(n-1))}, axes = normal); |
| > | obj := t2: n := 4: point( G, 1, 7): for j from 1 to n do stretch( P||j, obj, 1/j, G): od: draw({P||n(cr), obj(co), seq(op([P||j(color=black)]),j=1..(n-1))}, axes = normal); |
6. Reflexão Gradual
Uma reflexão gradual é uma combinação de duas transformações - uma reflexão e uma translação. O efeito rede de uma série de reflexões graduais é para ter uma série de imagens que transitam em cada lado de uma linha. A linha vem como um resultado de translações repetidas.
Para criar uma reflexão, o Maple precisa de um objeto, uma linha para refletir através, e um segmento de linha que esteja sobre a mesma linha para se acostumar a definir a translação.
| > | dsegment( seg , B,E);line( lin, [ B,E ]): |
Uma vez que nós tenhamos a linha e o segmento (o qual deve ser colinear), nós podemos aplicar a reflexão gradual em um objeto - nesse caso o triângulo t2. Nós iremos aplicá-lo três vezes, e depois desenhamos os resultados.
| > | obj := t2: GlideReflection( ra, obj, lin, seg): GlideReflection( rb, ra, lin, seg): GlideReflection( rc, rb, lin, seg): draw( { obj(cb), ra(cr), rb(cb2), rc(cr2), lin(cgr)} ); |
Como você pode ver o triângulo faz duas coisas em cada passo - ele se move (translação), e ele se reflete. Isso cria a aparência "footprint"
| > | obj := t1: GlideReflection( ra, obj, lin, seg): GlideReflection( rb, ra, lin, seg): GlideReflection( rc, rb, lin, seg): draw( { obj(cb), ra(cr), rb(cb2), rc(cr2), lin(cgr)} ); |
| > | obj := s1: GlideReflection( ra, obj, lin, seg): GlideReflection( rb, ra, lin, seg): GlideReflection( rc, rb, lin, seg): draw( { obj(cb), ra(cr), rb(cb2), rc(cr2), lin(cgr)} ); |
| > |
| > |